package com.citycloud.ccuap.tc.admin.sec.secuser;

import com.citycloud.ccuap.tc.yq.entity.SysDimensionTableConfig;
import com.citycloud.ccuap.tc.yq.view.TableField;

import java.util.List;
import java.util.Set;

public interface ISecUserCacheService {
    
    void buildAllDataGroupAndRoleCache();
    
    void buildAllDataGroupCache();
    
    void buildDataGroupCacheById(String datagroupId);
    
    void buildAllRoleDataGroupCache();
    
    void buildRolesDataGroupCacheByDataGroupId(String datagroupId);
    
    void buildRoleDataGroupCache(Long roleId);
    
    void buildUserProjectRoleCache(Long projectId, Long userId);
    
    void rebuildDatagroupCacheByTableId(String tableId);
    
    void buildDatagroupCache(List<SysDimensionTableConfig> sysDimensionTableConfigs);
    
    void deleteRoleDataGroupCache(Long roleId);
    
    void deleteDataGroupCacheById(String datagroupId);
    
    /**
     * 获取用户在某个站点下具有的表权限
     *
     * @param userId
     * @param projectId
     * @param datasource
     * @return
     */
    Set<String> getDataPermissionsOfTableByUser(Long userId, Long projectId, String datasource);
    
    /**
     * 获取某个账号在某个站点某张表下的权限字段
     *
     * @param userId
     * @param projectId
     * @param tableValue
     * @return
     */
    Set<String> getDataPermissionsOfFieldByUserAndTable(Long userId, Long projectId, String tableValue);
    
    /**
     * 获取用户指定表下拥有权限的字段 以及字段条件
     * @param userId
     * @param projectId
     * @param tableValue
     * @param groupNo
     * @return
     */
    TableField getDataPermissionsOfTableField(Long userId, Long projectId, String tableValue, String groupNo);
}
